import { Global, Module } from '@nestjs/common';
import { ConfigService } from '@nestjs/config';
import { SmsService } from './sms.service';
import * as tencentcloud from 'tencentcloud-sdk-nodejs';
import { SmsController } from './sms.controller';
import { TypeOrmModule } from '@nestjs/typeorm';
import { Sms } from './entities/sms.entity';

@Global()
@Module({
  imports: [TypeOrmModule.forFeature([Sms])],
  controllers: [SmsController],
  providers: [
    SmsService,
    {
      provide: 'SMS_CLIENT',
      inject: [ConfigService],
      async useFactory(configService: ConfigService) {
        // 导入对应产品模块的client models。
        const smsClient = tencentcloud.sms.v20210111.Client;

        /* 实例化要请求产品(以sms为例)的client对象 */
        const client = new smsClient({
          credential: {
            /* 为了保护密钥安全，建议将密钥设置在环境变量中或者配置文件中。
             * 硬编码密钥到代码中有可能随代码泄露而暴露，有安全隐患，并不推荐。
             * SecretId、SecretKey 查询: https://console.cloud.tencent.com/cam/capi */
            secretId: configService.get('sms.secretId'),
            secretKey: configService.get('sms.secretKey'),
          },
          /* 必填：地域信息，可以直接填写字符串ap-guangzhou，支持的地域列表参考 https://cloud.tencent.com/document/api/382/52071#.E5.9C.B0.E5.9F.9F.E5.88.97.E8.A1.A8 */
          region: 'ap-guangzhou',
          /* 非必填:
           * 客户端配置对象，可以指定超时时间等配置 */
          profile: {
            /* SDK默认用TC3-HMAC-SHA256进行签名，非必要请不要修改这个字段 */
            signMethod: 'HmacSHA256',
            httpProfile: {
              reqMethod: 'POST', // 请求方法
              reqTimeout: 10, // 请求超时时间，默认60s
              /**
               * 指定接入地域域名，默认就近地域接入域名为 sms.tencentcloudapi.com ，也支持指定地域域名访问，例如广州地域的域名为 sms.ap-guangzhou.tencentcloudapi.com
               */
              endpoint: 'sms.tencentcloudapi.com',
            },
          },
        });
        return client;
      },
    },
  ],
  exports: [SmsService],
})
export class SmsModule {}
